home *** CD-ROM | disk | FTP | other *** search
/ Mac Magazin/MacEasy 79 / maccd 79.iso / multimedial / GL Tron / Source / gltron / geom.c < prev    next >
Encoding:
C/C++ Source or Header  |  2001-05-13  |  2.2 KB  |  119 lines  |  [TEXT/CWIE]

  1. /* some geometric routines always needed */
  2.  
  3. #include <math.h>
  4.  
  5. float length(float *v) {
  6.     return sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2]);
  7. }
  8.  
  9. float length2(float *v) {
  10.   return sqrt(v[0] * v[0] + v[1] * v[1]);
  11. }
  12.  
  13. float length3(float *v) {
  14.   return length(v);
  15. }
  16.  
  17. void normalize(float *v) {
  18.     float d = length(v);
  19.     if (d == 0) return;
  20.     v[0] /= d;
  21.     v[1] /= d;
  22.     v[2] /= d;
  23. }
  24.  
  25. void crossprod(float *v1, float *v2, float *out) {
  26.     out[0] = v1[1] * v2[2] - v1[2] * v2[1];
  27.     out[1] = v1[2] * v2[0] - v1[0] * v2[2];
  28.     out[2] = v1[0] * v2[1] - v1[1] * v2[0];
  29. }
  30.  
  31. void normcrossprod(float *v1, float *v2, float *out) {
  32.     crossprod(v1, v2, out);
  33.     normalize(out);
  34. }
  35.  
  36. float scalarprod2(float *v1, float *v2) {
  37.     return v1[0] * v2[0] + v1[1] * v2[1];
  38. }
  39.  
  40. float scalarprod(float *v1, float *v2) {
  41.     return v1[0] * v2[0] + v1[1] * v2[1] + v1[2] * v2[2];
  42. }
  43.  
  44. void vsub2(float *v1, float *v2, float *out) {
  45.     out[0] = v1[0] - v2[0];
  46.     out[1] = v1[1] - v2[1];
  47. }
  48.  
  49. void vsub(float *v1, float *v2, float *out) {
  50.     out[0] = v1[0] - v2[0];
  51.     out[1] = v1[1] - v2[1];
  52.     out[2] = v1[2] - v2[2];
  53. }
  54.  
  55. void vadd2(float *v1, float *v2, float *out) {
  56.     out[0] = v1[0] + v2[0];
  57.     out[1] = v1[1] + v2[1];
  58. }
  59.  
  60. void vadd(float *v1, float *v2, float *out) {
  61.     out[0] = v1[0] + v2[0];
  62.     out[1] = v1[1] + v2[1];
  63.     out[2] = v1[2] + v2[2];
  64. }
  65.  
  66. void vcopy(float *v1, float *out) {
  67.     out[0] = v1[0];
  68.     out[1] = v1[1];
  69.     out[2] = v1[2];
  70. }
  71.  
  72. void vmul(float *v, float f) {
  73.     v[0] *= f;
  74.     v[1] *= f;
  75.     v[2] *= f;
  76. }
  77.  
  78. /* 4 entries... */
  79.  
  80. float length4(float *v) {
  81.     return sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2] +
  82.             v[3] * v[3]);
  83. }
  84.  
  85. void normalize4(float *v) {
  86.     float d = length(v);
  87.     if (d == 0) return;
  88.     v[0] /= d;
  89.     v[1] /= d;
  90.     v[2] /= d;
  91.     v[3] /= d;
  92. }
  93.  
  94. float scalarprod4(float *v1, float *v2) {
  95.     return v1[0] * v2[0] + v1[1] * v2[1] + v1[2] * v2[2] +
  96.       v1[3] * v2[3];
  97. }
  98.  
  99. void vsub4(float *v1, float *v2, float *out) {
  100.     out[0] = v1[0] - v2[0];
  101.     out[1] = v1[1] - v2[1];
  102.     out[2] = v1[2] - v2[2];
  103.     out[3] = v1[3] - v2[3];
  104. }
  105.  
  106. void vadd4(float *v1, float *v2, float *out) {
  107.     out[0] = v1[0] + v2[0];
  108.     out[1] = v1[1] + v2[1];
  109.     out[2] = v1[2] + v2[2];
  110.     out[3] = v1[3] + v2[3];
  111. }
  112.  
  113. void vcopy4(float *v1, float *out) {
  114.     out[0] = v1[0];
  115.     out[1] = v1[1];
  116.     out[2] = v1[2];
  117.     out[3] = v1[3];
  118. }
  119.